// 这里写请求接口
import $ajax from './ajax.js';
import info from '../../config/config.js';
// import xml from './xml.js';// 解析返回的数据是XML
import Vue from 'vue';
let pmN = 0;
// 0表示GET方法，1表示POST方法，2表示PUT方法，3表示DELETE方法   （注，由于该项目所有的参数都为json传参，所以统一转换为JSON串上传,第五个参数传true则不会转换）
function pm (met, url, data, noLoad, change) {
    var p = new Promise(function (resolve, reject) {
        url = info.baseUrl + url;
        var ks = parseInt(met) > 0 && !change && data && (typeof (data) === 'object' && typeof (data.append) !== 'function');
        if (ks) {
            data = JSON.stringify(data);
        }
        if (!noLoad) {
            pmN++;
            api.loading(true);
        }

        $ajax.ajax(
            met,
            url,
            resolve,
            data,
            reject,
            info.token ? { accessToken: info.token } : false
        );
    });
    if (!noLoad) {
        p.then(
            function () {
                pmN--;
                hide();
            },
            function () {
                pmN--;
                hide();
            }
        );
    }

    return p;
}
function hide () {
    if (pmN === 0) {
        api.loading(false);
    }
}
// 常用请求快捷方式  四个参数，第一个为请求地址，第二个为请求参数，第三个为是否出现loading,默认自动出现loading,传true为不出现loading，第四个为强制不转字符串，默认转成字符串
function $get (url, data, noLoad, nc) {
    return pm(0, url, data, noLoad, nc);
}
function $post (url, data, noLoad, nc) {
    return pm(1, url, data, noLoad, nc);
}
// 配置请求方法 返回的是promise对像
const api = {
    info,
    // ajax返回值简易判断接口函数
    ResOk: function (d, fuc) {
        // if (d.isSuccess) {
        //     fuc(d);
        // } else {
        // }
    },
    dom: document.getElementById('loading-wrapper'),
    loading (bl) {
        api.dom.style.display = bl ? 'block' : 'none';
    },
    getQueryStringByName (name) {
        let result = document.location.search.match(
            new RegExp('[?&]' + name + '=([^&]+)', 'i')
        );
        if (result == null || result.length < 1) return false;
        result[1] = result[1].replace(/%20/g, '%2B'); // 强转成+号编码
        return result[1];
    },
    addUrl (obj) {
        let temp = '?';
        for (let k in obj) {
            temp += k + '=' + obj[k] + '&';
        }
        return temp.slice(0, -1);
    },
    ajax: pm,
    // get方法示例
    myGet (data) {
        return $get('/test', data);
    },
    // post方法示例
    myPost (data, noLoad) {
        return $post('/test', data, noLoad);
    },
    // 杂传参示例 第一个参数会拼在URL上面，
    myPost2 (obj1, obj2, noLoad) {
        return $post('/test/' + this.addUrl(obj1), obj2, noLoad);
    }
};
Vue.prototype.$loading = api.loading;
export default api;
